//package process_demo.thread_pool.impl;
//
///**
// * @author haomin
// * @date 2022/05/05 20:08
// **/
//import java.util.concurrent.BlockingQueue;
//import java.util.concurrent.TimeUnit;
//
//// 一个临时员工线程要完成的工作
//public class TemporaryJob implements Runnable {
//    // 需要阻塞队列
//    private final BlockingQueue<Runnable> workQueue;
//    private final long keepAliveTime;
//    private final TimeUnit unit;
//    private Runnable firstCommand;
//
//    TemporaryJob(long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, Runnable firstCommand) {
//        this.keepAliveTime = keepAliveTime;
//        this.unit = unit;
//        this.workQueue = workQueue;
//        this.firstCommand = firstCommand;
//    }
//
//    @Override
//    public void run() {
//        try {
//            firstCommand.run();     // 优先先把刚提交的任务先做掉了
//            firstCommand = null;    // 这里设置 null 的意思是，不影响 firstCommand 对象被 GC 时的回收
//
//            // 一旦超过一定时间没有任务，临时工是需要退出的
//            // 1. keepAliveTime + unit 记录起来
//            // 2. 怎么就知道超过多久没有任务了？如果一定时间内都无法从队列中取出来任务，则认为摸鱼时间够了
//            while (!Thread.interrupted()) {
////                Runnable command = workQueue.take();
//                Runnable command = workQueue.poll(keepAliveTime, unit);
//                if (command == null) {
//                    // 说明，没有取到任务
//                    // 说明超时时间已到
//                    // 说明该线程已经 keepAliveTime + unit 时间没有工作了
//                    // 所以，可以退出了
//                    break;
//                }
//                command.run();
//            }
//        } catch (InterruptedException ignored) {}
//    }
//}